home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1992-02-26 | 7.8 KB | 298 lines |
- 'This scroll method has ben named as a SWAP SCROLLY...... By PAUL OVERY
- '
- ' Paul Overy (Games Programmer on the look out for a job)
- ' "Fryup Productions"
- ' 27 Barton Rd
- ' Maidstone
- ' Kent ME15 7BU
- '
- ' I MUST HAVE some music modules for my future games! Can anyone help.
- '
- Dim C(15)
- Global C(),_NEXT_BLOCK_X,_NEXT_BLOCK_Y,_BORDER_X,_BORDER_Y,ST
- Set Sprite Buffer 200 : Hide : Unpack 13 To 0
- Get Sprite 1,0,0 To 112,128 : Cls 0 : Sprite 8,230,100,1
- '
- Proc GRAB_BLOCKS
- '
- Screen Open 0,320+32,256+32,16,Lowres : Flash Off : Curs Off : Cls 0
- Double Buffer : Screen Display 0,128,38,320,256
- Autoback 0 : Auto View Off : Bob Update Off
- '
- OFFSET_X=16 : OFFSET_Y=16
- OX=16 : OY=16 : CUT_SIZE=36 : SPEED=2 : ST=Start(14)
- '
- 'Block update sections needed 16 8 4 2
- 'SPEED can only be set to 1 2 4 8
- 'Best CUT_SIZE 18 36 72 144
- '
- ' more time free <<<< <<< << < < <
- '
- '------------------------------------------------------
- 'Update the whole screen before starting.
- For Y=0 To 272 Step 16
- For X=0 To 336 Step 16
- Put Block Deek(ST+((X/16)*2)+((Y/16)*256)),X,Y
- Next X
- Next Y
- Screen Swap : Screen Copy Physic To Logic
- Screen Offset 0,16,16 : View
- '------------------------------------------------------
- 'set sprite & screen colours.
- For K=0 To 15
- Colour K,C(K)
- Next K
- For K=16 To 29 Step 4
- Colour K+1,$85F : Colour K+2,$F66 : Colour K+3,$EEE
- Next K
- '------------------------------------------------------
- Do
- OFFSET_X=16 : OFFSET_Y=16 : MV_DIR=False
- SCRL_STEP_Y=0 : SCRL_STEP_X=0 : OY=0 : OX=0
- '
- If Jup(1) and MAP_Y>0
- MV_DIR=True : _BORDER_Y=1 : Dec MAP_Y
- OY=16 : Rem screen copy down later
- SCRL_STEP_Y=-SPEED : Rem step in pixels
- End If
- If Jdown(1) and MAP_Y<46
- MV_DIR=True : _BORDER_Y=2 : Inc MAP_Y
- OY=-16 : Rem screen copy up later
- SCRL_STEP_Y=SPEED : Rem step in pixels
- End If
- If Jleft(1) and MAP_X>0
- MV_DIR=True : _BORDER_X=1 : Dec MAP_X
- OX=16 : Rem screen copy right later
- SCRL_STEP_X=-SPEED : Rem step in pixels
- End If
- If Jright(1) and MAP_X<106
- MV_DIR=True : _BORDER_X=2 : Inc MAP_X
- OX=-16 : Rem screen copy left later
- SCRL_STEP_X=SPEED : Rem step in pixels
- End If
- '
- If MV_DIR=True
- Y=0 : Rem start copying at the top of the screen.
- OK_SWAP=True : Rem do a screen swap 0 later on.
- '
- While OFFSET_X>0 and OFFSET_X<32 and OFFSET_Y>0 and OFFSET_Y<32
- Add OFFSET_Y,SCRL_STEP_Y
- Add OFFSET_X,SCRL_STEP_X
- Screen Offset 0,OFFSET_X,OFFSET_Y
- View
- If OK_SWAP=True
- 'logical screen now has the next scroll position ready.
- Screen Swap
- OK_SWAP=False
- End If
- Wait Vbl
- 'Gradually update the screen in the background.
- Screen Copy Physic(0),0,Y,352,Y+CUT_SIZE To Logic(0),OX,Y+OY
- Add Y,CUT_SIZE : Rem work down the physical screen
- '----------------------------------
- '2 ON GOTO's saves using 4 IF's, is a CASE NOT A GOTO OK.
- On _BORDER_Y Goto JY1,JY2
- Goto SKIP1
- JY1: _SCENE_TOP[MAP_X,MAP_Y] : Goto SKIP1
- JY2: _SCENE_BOTTOM[MAP_X,MAP_Y+17] : Goto SKIP1
- '
- SKIP1:
- On _BORDER_X Goto JX1,JX2
- Goto SKIP2
- JX1: _SCENE_LEFT[MAP_X,MAP_Y] : Goto SKIP2
- JX2: _SCENE_RIGHT[MAP_X+21,MAP_Y] : Goto SKIP2
- SKIP2:
- '----------------------------------
- Wend
- End If
- If Key State(69) Then Stop
- Loop
- '
- Procedure GRAB_BLOCKS
- Unpack 15 To 0
- N=1
- For Y=0 To 240 Step 16
- For X=0 To 304 Step 16
- Get Block N,X,Y,16,16 : Inc N
- Next X
- Next Y
- For C=0 To 15 : C(C)=Colour(C) : Next C
- End Proc
- '
- 'The below procedures only support stepping speeds of 1 & 2.
- 'When using faster speeds, less block sections must be used.
- 'i.e. just delete some lables, and renumber them. Don't forget to change
- 'the CUT_SIZE and the SPEED.
- '
- Procedure _SCENE_TOP[X1,Y1]
- P=ST+(X1*2)+(Y1*256)
- Inc _NEXT_BLOCK_Y
- ' Never use a for loop, far 2 slow.
- On _NEXT_BLOCK_Y Goto P1,P2,P3,P4,P5,P6,P7,P8
- P1:
- Put Block Deek(P),0,0
- Put Block Deek(P+2),16,0
- Put Block Deek(P+4),32,0
- Pop Proc
- P2:
- Put Block Deek(P+6),48,0
- Put Block Deek(P+8),64,0
- Put Block Deek(P+10),80,0
- Pop Proc
- P3:
- Put Block Deek(P+12),96,0
- Put Block Deek(P+14),112,0
- Put Block Deek(P+16),128,0
- Pop Proc
- P4:
- Put Block Deek(P+18),144,0
- Put Block Deek(P+20),160,0
- Put Block Deek(P+22),176,0
- Pop Proc
- P5:
- Put Block Deek(P+24),192,0
- Put Block Deek(P+26),208,0
- Put Block Deek(P+28),224,0
- Pop Proc
- P6:
- Put Block Deek(P+30),240,0
- Put Block Deek(P+32),256,0
- Put Block Deek(P+34),272,0
- Pop Proc
- P7:
- Put Block Deek(P+36),288,0
- Put Block Deek(P+38),304,0
- Put Block Deek(P+42),336,0
- Pop Proc
- P8:
- Put Block Deek(P+40),320,0
- _NEXT_BLOCK_Y=0
- _BORDER_Y=0
- End Proc
- Procedure _SCENE_BOTTOM[X1,Y1]
- P=ST+(X1*2)+(Y1*256)
- Inc _NEXT_BLOCK_Y
- ' Never use for loops in main code, far 2 slow.
- On _NEXT_BLOCK_Y Goto P1,P2,P3,P4,P5,P6,P7,P8
- P1:
- Put Block Deek(P),0,272
- Put Block Deek(P+2),16,272
- Put Block Deek(P+4),32,272
- Pop Proc
- P2:
- Put Block Deek(P+6),48,272
- Put Block Deek(P+8),64,272
- Put Block Deek(P+10),80,272
- Pop Proc
- P3:
- Put Block Deek(P+12),96,272
- Put Block Deek(P+14),112,272
- Put Block Deek(P+16),128,272
- Pop Proc
- P4:
- Put Block Deek(P+18),144,272
- Put Block Deek(P+20),160,272
- Put Block Deek(P+22),176,272
- Pop Proc
- P5:
- Put Block Deek(P+24),192,272
- Put Block Deek(P+26),208,272
- Put Block Deek(P+28),224,272
- Pop Proc
- P6:
- Put Block Deek(P+30),240,272
- Put Block Deek(P+32),256,272
- Put Block Deek(P+34),272,272
- Pop Proc
- P7:
- Put Block Deek(P+36),288,272
- Put Block Deek(P+38),304,272
- Put Block Deek(P+40),320,272
- Pop Proc
- P8:
- Put Block Deek(P+42),336,272
- _NEXT_BLOCK_Y=0
- _BORDER_Y=0
- End Proc
- Procedure _SCENE_LEFT[X1,Y1]
- P=ST+(X1*2)+(Y1*256)
- Inc _NEXT_BLOCK_X
- ' Never use for loops in main code, far 2 slow.
- On _NEXT_BLOCK_X Goto P1,P2,P3,P4,P5,P6,P7,P8
- P1:
- Put Block Deek(P),0,0
- Put Block Deek(P+256),0,16
- Pop Proc
- P2:
- Put Block Deek(P+512),0,32
- Put Block Deek(P+768),0,48
- Pop Proc
- P3:
- Put Block Deek(P+1024),0,64
- Put Block Deek(P+1280),0,80
- Pop Proc
- P4:
- Put Block Deek(P+1536),0,96
- Put Block Deek(P+1792),0,112
- Pop Proc
- P5:
- Put Block Deek(P+2048),0,128
- Put Block Deek(P+2304),0,144
- Pop Proc
- P6:
- Put Block Deek(P+2560),0,160
- Put Block Deek(P+2816),0,176
- Pop Proc
- P7:
- Put Block Deek(P+3072),0,192
- Put Block Deek(P+3328),0,208
- Put Block Deek(P+3584),0,224
- Pop Proc
- P8:
- Put Block Deek(P+3840),0,240
- Put Block Deek(P+4096),0,256
- Put Block Deek(P+4352),0,272
- _NEXT_BLOCK_X=0
- _BORDER_X=0
- End Proc
- Procedure _SCENE_RIGHT[X1,Y1]
- P=ST+(X1*2)+(Y1*256)
- Inc _NEXT_BLOCK_X
- ' Never use for loops in main code, far 2 slow.
- On _NEXT_BLOCK_X Goto P1,P2,P3,P4,P5,P6,P7,P8
- P1:
- Put Block Deek(P),336,0
- Put Block Deek(P+256),336,16
- Pop Proc
- P2:
- Put Block Deek(P+512),336,32
- Put Block Deek(P+768),336,48
- Pop Proc
- P3:
- Put Block Deek(P+1024),336,64
- Put Block Deek(P+1280),336,80
- Pop Proc
- P4:
- Put Block Deek(P+1536),336,96
- Put Block Deek(P+1792),336,112
- Pop Proc
- P5:
- Put Block Deek(P+2048),336,128
- Put Block Deek(P+2304),336,144
- Pop Proc
- P6:
- Put Block Deek(P+2560),336,160
- Put Block Deek(P+2816),336,176
- Pop Proc
- P7:
- Put Block Deek(P+3072),336,192
- Put Block Deek(P+3328),336,208
- Put Block Deek(P+3584),336,224
- Pop Proc
- P8:
- Put Block Deek(P+3840),336,240
- Put Block Deek(P+4096),336,256
- Put Block Deek(P+4352),336,272
- _NEXT_BLOCK_X=0
- _BORDER_X=0
- End Proc